/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: Lenovo
 * Date: 2025-06-30
 * Time: 0:01
 */
//https://leetcode.cn/problems/design-circular-queue/
// 设计你的循环队列实现。 循环队列是一种线性数据结构，
// 其操作表现基于 FIFO（先进先出）原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。
class MyCircularQueue {
    int[] arr;
    int size;
    int size_max;
    int head;
    int last;

    public MyCircularQueue(int k) {
        arr=new int[k];
        size=0;
        size_max=k;
        head=0;
        last=0;
    }

    public boolean enQueue(int value) {
        if(size==size_max){
            return false;
        }
        arr[last]=value;
        last=(last+1)%size_max;
        size++;
        return true;
    }

    public boolean deQueue() {
        if(size==0){
            return false;
        }
        head=(head+1)%size_max;
        size--;
        return true;
    }

    public int Front() {
        if(size==0){
            return -1;
        }
        return arr[head];
    }

    public int Rear() {
        if(size==0){
            return -1;
        }
        return arr[(last-1+size_max)%size_max];
    }

    public boolean isEmpty() {
        if(size==0){
            return true;
        }
        else{
            return false;
        }

    }

    public boolean isFull() {
        if(size==size_max){
            return true;
        }
        else{
            return false;
        }

    }
}
public class Test {
    public static void main(String[] args) {
        MyCircularQueue queue=new MyCircularQueue(3);
        queue.enQueue(1);
        queue.enQueue(2);
        System.out.println(queue.enQueue(3));
        System.out.println(queue.enQueue(4));
        System.out.println(queue.Front());
        System.out.println(queue.Rear());
        System.out.println("是否为满"+queue.isFull());
        System.out.println("是否为空"+queue.isEmpty());
        queue.deQueue();
        queue.deQueue();
        System.out.println(queue.deQueue());
        System.out.println(queue.deQueue());
        System.out.println("是否为满"+queue.isFull());
        System.out.println("是否为空"+queue.isEmpty());
    }
}
